package com.solocredit.finance.utils.helper

import com.solocredit.finance.R
import com.solocredit.finance.app.MyApp
import com.solocredit.finance.http.ApiService
import com.solocredit.finance.http.ApiService.addCommonParams
import com.solocredit.finance.http.ApiService.addRandomParams
import com.solocredit.finance.http.HttpHelper
import com.solocredit.finance.http.IHttpCallback
import com.solocredit.finance.utils.DateUtils
import com.solocredit.finance.utils.event.MullaEventData
import org.json.JSONObject

/**
 * MullaFlow
 * @Author wwdeng
 * @CreateTime: 2024/8/15 18:06
 * @Annotation：保存自定义数据接口 参数
 */
object MullaCustomDataHelper {
    //用户头像
    val userAvatarList = arrayListOf(R.mipmap.mulla_user_avatar1,R.mipmap.mulla_user_avatar2,R.mipmap.mulla_user_avatar3,R.mipmap.mulla_user_avatar4)

    /**
     * userName                         : 用户名
     * userBirthday                     ： 用户生日（时间戳 秒）
     * userAvatarId                     ： 用户头像id
     * birthdayPointsReceiveTime        ： 生日福利领取时间（时间戳 秒）
     * isSignReminder                   ： 是否开启签到提醒（Boolean）
     * signReminderPointsReceiveTime    ： 签到提醒积分领取时间（时间戳 秒）
     * repaymentPointsReceiveTime       ： 首次还款积分领取时间（时间戳 秒 暂定）
     * luckyDrawCount                   ： 幸运抽奖次数
     * luckyDrawLastTime                ： 上一次幸运抽奖时间（时间戳 秒）
     * signDurationPointsReceiveTime    ： 本月连续签到15天积分领取时间（时间戳 秒）
     *
     * todo 2025/05/26-2025/05/30 新需求 签到提额
     * signRiseLastTime                 ： 签到提额  上次签到时间戳
     * signRiseDays                     ： 签到提额  连续签到天数
     *
     */

    /**
     * 获取保存的自定义数据
     */
    fun getMullaCustomData(): JSONObject {
        val customData = SharedHelper.getMullaSPString(SharedHelper.MULLA_SPKEY.MULLA_CUSTOM_DATA)
        if (customData.isEmpty()){
            return JSONObject()
        }
        return JSONObject(customData)
    }

    /**
     * 获取用户昵称
     */
    fun getMullaCustomUserName(): String{
        val data = getMullaCustomData()
        return data.optString("userName","Hello")
    }

    /**
     * 获取用户头像id
     */
    fun getMullaCustomUserAvatarId(): Int{
        val data = getMullaCustomData()
        return data.optInt("userAvatarId",1)
    }

    /**
     * 获取用户头像
     */
    fun getMullaCustomUserAvatar(): Int{
        val data = getMullaCustomData()
        val iconId = data.optInt("userAvatarId",1)
        return userAvatarList[iconId - 1]
    }

    /**
     * 获取用户生日(时间戳 秒)
     */
    fun getMullaCustomUserBirthday(): String{
        val data = getMullaCustomData()
        return data.optString("userBirthday","")
    }

    /**
     * 获取生日福利领取时间戳（秒）
     */
    fun getMullaCustomBirthdayReceiveTimestamp(): String{
        val data = getMullaCustomData()
        return data.optString("birthdayPointsReceiveTime","")
    }


    /**
     * 获取剩余抽奖次数
     */
    fun getMullaCustomLuckyDrawCount(): Int{
        val data = getMullaCustomData()
        //上一次抽奖时间戳（秒）
        val luckyDrawLastTime = data.optString("luckyDrawLastTime","")
        //没有抽过奖
        if (luckyDrawLastTime.isEmpty()){
            return 3
        }
        //上次抽奖日期 != 今天
        if (!DateUtils.IsToday(luckyDrawLastTime.toLong() * 1000)){
            return 3
        }
        return data.optInt("luckyDrawCount",3)
    }

    /**
     * 获取是否开启签到提醒
     */
    fun getMullaCustomIsSignReminder(): Boolean{
        val data = getMullaCustomData()
        return data.optBoolean("isSignReminder",false)
    }

    /**
     * 获取签到提醒积分领取时间（时间戳 秒）
     */
    fun getMullaCustomSignReminderPointsReceiveTimestamp(): String{
        val data = getMullaCustomData()
        return data.optString("signReminderPointsReceiveTime","")
    }

    /**
     * 本月连续签到15天积分领取时间（时间戳 秒）
     */
    fun getMullaCustomSignDurationPointsReceiveTimestamp(): String{
        val data = getMullaCustomData()
        return data.optString("signDurationPointsReceiveTime","")
    }

    /**
     * 获取 签到提额 上次签到时间戳
     */
    fun getMullaCustomSignRiseLastTimeStamp(): Long{
        val data = getMullaCustomData()
        return data.optLong("signRiseLastTime",0)
    }

    /**
     * 获取 签到提额  连续签到天数
     */
    fun getMullaCustomSignRiseDays(): Int{
        val data = getMullaCustomData()
        return data.optInt("signRiseDays",0)
    }

    /**
     * 保存用户昵称
     */
    fun saveMullaCustomUserNameAction(userName: String){
        val obj = getMullaCustomData()
        obj.put("userName",userName)
        saveMullaCustomDataAction(obj)
    }

    /**
     * 保存用户头像id
     */
    fun saveMullaCustomUserAvatar(userAvatarId: Int){
        val obj = getMullaCustomData()
        obj.put("userAvatarId",userAvatarId)
        saveMullaCustomDataAction(obj)
    }

    /**
     * 保存用户生日(时间戳 秒)
     */
    fun saveMullaCustomUserBirthday(timestamp: String){
        val obj = getMullaCustomData()
        obj.put("userBirthday",timestamp)
        saveMullaCustomDataAction(obj)
    }

    /**
     * 保存生日福利领取记录时间戳（秒）
     */
    fun saveMullaCustomUserBirthdayBenefitsReceiveTime(timestamp: String, callback: IHttpCallback){
        val obj = getMullaCustomData()
        obj.put("birthdayPointsReceiveTime",timestamp)
        saveMullaCustomDataAction(obj,callback)
    }

    /**
     * 保存用户剩余抽奖次数
     */
    fun saveMullaCustomLuckyDrawCount(count: String){
        val obj = getMullaCustomData()
        obj.put("luckyDrawCount",count)
        obj.put("luckyDrawLastTime","${System.currentTimeMillis() / 1000}")
        saveMullaCustomDataAction(obj)
    }

    /**
     * 保存用户是否开启签到提醒
     */
    fun saveMullaCustomSignReminder(){
        val obj = getMullaCustomData()
        obj.put("isSignReminder", !getMullaCustomIsSignReminder())
        saveMullaCustomDataAction(obj)
    }

    /**
     * 保存用户领取签到提醒任务积分的时间（时间戳 秒）
     */
    fun saveMullaCustomSignReminderPointsTimestamp(){
        val obj = getMullaCustomData()
        obj.put("isSignReminder", true)
        obj.put("signReminderPointsReceiveTime","${System.currentTimeMillis() / 1000}")
        saveMullaCustomDataAction(obj)
    }

    /**
     * 保存用户领取本月连续签到15天任务积分的时间（时间戳 秒）
     */
    fun saveMullaCustomSignDurationPointsReceiveTimestamp(){
        val obj = getMullaCustomData()
        obj.put("signDurationPointsReceiveTime","${System.currentTimeMillis() / 1000}")
        saveMullaCustomDataAction(obj)
    }

    /**
     * 保存  签到提额  上次签到时间戳 和 连续签到天数
     */
    fun saveMullaCustomSignRiseLastTimeStampAndDays(signDays: Int,timestamp: String){
        val obj = getMullaCustomData()
        obj.put("signRiseLastTime",timestamp)
        obj.put("signRiseDays",signDays)
        saveMullaCustomDataAction(obj)
    }

    /**
     * 获取自定义数据
     */
    fun loadMullaCustomDataAction(){
        val httpUrl = ApiService.getHttpUrl(ApiService.API_PATH.MULLA_API_LOAD_CUSTOM_PARAMS_PATH)
        val params = JSONObject().addCommonParams().addRandomParams().apply {
//            put("0","")
        }
        HttpHelper.postMullaAction(httpUrl,params,object : IHttpCallback {
            override fun onRequestSuccess(data: JSONObject) {
                when(data.optInt("code")) {
                    0 -> {//成功
                        val obj = data.optJSONObject("obj")
                        if (obj != null && obj.has("userInfo")){
                            val userInfo = obj.optString("userInfo")
                            //保存自定义数据
                            SharedHelper.saveMullaSPData(SharedHelper.MULLA_SPKEY.MULLA_CUSTOM_DATA,userInfo.toString())
                            //通知自定义数据刷新完成
                            MyApp.app.publisher.publish(MullaEventData(MullaEventData.TYPE.MULLA_CUSTOM_DATA_REFRESHED))
                        }
                    }
                    else -> {
                    }
                }
            }
            override fun onRequestError(error: JSONObject) {
            }
            override fun onRequestFinish() {
            }
        })
    }

    /**
     * 保存数据
     */
    private fun saveMullaCustomDataAction(obj: JSONObject,callback: IHttpCallback? = null){
        val httpUrl = ApiService.getHttpUrl(ApiService.API_PATH.MULLA_API_SAVE_CUSTOM_PARAMS_PATH)
        val params = JSONObject().addCommonParams().addRandomParams().apply {
            put("userInfo",obj.toString())
        }
        HttpHelper.postMullaAction(httpUrl,params,object : IHttpCallback {
            override fun onRequestSuccess(data: JSONObject) {
                callback?.onRequestSuccess(data)
                when(data.optInt("code")) {
                    0 -> {//成功
                        val obj = data.optJSONObject("obj")
                        if (obj != null){
                            //保存成功 再更新数据
                            loadMullaCustomDataAction()
                        }
                    }
                }
            }

            override fun onRequestError(error: JSONObject) {
                callback?.onRequestError(error)
            }

            override fun onRequestFinish() {
                callback?.onRequestFinish()
            }
        })
    }
}